package cn.enjoy.design.create.singleton;

/**
 * @author K
 * @date 2020/11/6 10:29
 */
public class Singleton {

    private static Singleton instance;

    /**
     * 懒汉式加载 多线程有问题（新版本java中，类只有在使用时才被加载，也是一种延迟加载。想要提前加载，在程序开始前，强制调用getInstance）
     */
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    /**
     * 同步锁单例模式 耗时
     */
    public static synchronized Singleton getInstance2() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    /**
     * 双重校验锁单例模式 适用多线程
     */
    public static Singleton getInstance3() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    // 无锁的线程安全单例模式  属性初始化时直接new，getInstance时，加上synchronized

}